package com.qijian.flowable.mapper;

import com.qijian.flowable.domain.query.ProcessInstanceQueryVo;
import com.qijian.flowable.domain.vo.ProcessDefinitionVo;
import org.apache.ibatis.annotations.Param;
import org.flowable.idm.api.Group;
import org.flowable.idm.api.User;
import org.flowable.idm.engine.impl.GroupQueryImpl;
import org.flowable.idm.engine.impl.UserQueryImpl;

import java.util.List;
import java.util.Map;

/**
 * 流程公共查询Mapper，用于解耦系统sys模块
 *
 * @author 庄金明
 */
public interface FlowableCommonMapper {

    /**
     * 查询用户信息
     *
     * @param map /
     * @return /
     */
    List<User> selectUserByQueryCriteria(Map<String, Object> map);

    User selectUserById(Long id);

    /**
     * 查询用户信息
     *
     * @param query /
     * @return /
     */
    long selectUserCountByQueryCriteria(UserQueryImpl query);

    /**
     * 根据Flowable GroupQueryImpl查询岗位列表
     *
     * @return /
     */
    List<Group> selectGroupByQueryCriteria(Map<String, Object> map);

    /**
     * 根据Flowable GroupQueryImpl查询岗位数量
     *
     * @param query /
     * @return /
     */
    long selectGroupCountByQueryCriteria(GroupQueryImpl query);

    /**
     * 查询我的流程汇总信息
     *
     * @param processInstanceQueryVo /
     * @return /
     */
    List<ProcessDefinitionVo> listMyInvolvedSummary(ProcessInstanceQueryVo processInstanceQueryVo);

    /**
     * 根据名称查询ID
     *
     * @param name /
     * @return /
     */
    Long selectuserName(String name);

    /**
     * 根据部门名称查询部门负责人
     *
     * @param name /
     * @return /
     */
    Long selectUserDeptLeader(String name);

    Long selectUserMatrixLeader(@Param("deptId") Long deptId, @Param("matrixId") Long matrixId, @Param("deptAbbr") String deptAbbr);

    Long selectUserMatrixLeaderNew(@Param("deptId") Long deptId, @Param("matrixId") Long matrixId, @Param("deptAbbr") String deptAbbr);
}
